#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lecture_dossier.h"
#include "generation_cle.h"


struct file *creer_file(){

  struct file *f=(struct file *)malloc(sizeof(struct file));
  f->tete = NULL;
  f->queue = NULL;
  return f;
}

int file_vide(struct file *f){

  if(f->tete == NULL && f->queue == NULL) return 0;
  else return 1;
}

void enfiler(char * nom, unsigned long taille,unsigned long taille_piece, char * cle, unsigned char *buffermap, int taille_buffermap, struct file *f){
  
  struct fichier_partage *fichier;
  fichier=(struct fichier_partage *)malloc(sizeof(struct fichier_partage ));
  fichier->nom_fichier = malloc(sizeof(char)*(strlen(nom)+1));
  strcpy(fichier->nom_fichier,nom);
  fichier->taille_fichier = taille;
  fichier->taille_piece = taille_piece;
  fichier->cle_fichier = malloc(sizeof(char)*(strlen(cle)+1));
  strcpy(fichier->cle_fichier,cle);
  fichier->buffermap = malloc(sizeof(unsigned char)*taille_buffermap);
  memcpy(fichier->buffermap, buffermap, sizeof(unsigned char)*taille_buffermap);
  fichier->taille_buffermap = taille_buffermap;
  fichier->taille_buffermap = taille_buffermap;
  fichier->next=NULL;

  if(file_vide(f) == 0) f->tete=fichier;
  else{
    f->queue->next=fichier;
  }
  f->queue=fichier;
}

struct fichier_partage *defiler(struct file *f){

  struct fichier_partage *fichier;

  if(file_vide(f) == 0){
    printf("ERREUR:LISTE VIDE");
    return NULL;
  }
  else{
    fichier=f->tete;
    if(f->tete->next == NULL) f->tete = f->queue = NULL;
    else f->tete = f->tete->next;
    fichier->next=NULL;
    return fichier;
  }
}

void afficher_file(struct file *f){

  if(file_vide(f) == 0) printf("LISTE VIDE");
  else{
    struct fichier_partage * tempf=f->tete;
    while(tempf!=NULL){
      printf("Nom : %s",tempf->nom_fichier);
      printf(" - Taille totale : %ld",tempf->taille_fichier);
      printf(" - Taille piece : %ld",tempf->taille_piece);
      printf(" - Cle : %s",tempf->cle_fichier);
      printf(" - Taille buffermap : %d",tempf->taille_buffermap);
      printf(" - Buffermap : ");
      for (int i = 0; i < tempf->taille_buffermap; i++){
	printf("%d ", tempf->buffermap[i]); 
      }
      for (int i = 0; i < tempf->taille_buffermap; i++){
	printf("%c", tempf->buffermap[i]); 
      }
      printf("\n");
      tempf=tempf->next;
    }
  }
}

